home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Peter Lewis / PNL Libraries / MyOOMenus.p < prev    next >
Encoding:
Text File  |  1994-08-04  |  4.5 KB  |  189 lines  |  [TEXT/PJMM]

  1. unit MyOOMenus;
  2.  
  3. interface
  4.  
  5.     var
  6.         editEnabled: boolean;
  7.  
  8.     procedure InitOOMenus (defaultproc: procptr);
  9.     procedure DisplayMenuBar;
  10.     procedure FinishOOMenus;
  11.     procedure DoDefaultMenu (themenu, theitem: integer);
  12.     function SetOOMenuBar: boolean;
  13.  
  14. implementation
  15.  
  16.     uses
  17.         Traps, Balloons, MyTypes, MySystemGlobals, MyMenus, MyStrings, MyVersionResource,{}
  18.         BaseGlobals, MyFMenus, MyOOMainLoop, AERegistry, MyAEUtils, AEObjects;
  19.  
  20.     function SetOOMenuBar: boolean;
  21.     begin
  22.         SetOOMenuBar := FrontObject.SetMenuBar;
  23.     end;
  24.  
  25.     function HandleEditMenu (event, reply: AppleEvent; refcon: longInt): OSErr;
  26.         var
  27.             err: OSErr;
  28.     begin
  29.         FrontObject.DoEditMenu(refcon);
  30.         HandleEditMenu := noErr;
  31.     end;
  32.  
  33.     procedure DoDefaultMenu (themenu, theitem: integer);
  34.         var
  35.             save: grafPtr;
  36.             DAName: str255;
  37.             oe: OSErr;
  38.     begin
  39.         if themenu = M_Apple then begin
  40.             GetPort(save);
  41.             GetItem(GetMHandle(M_apple), theitem, DAName);
  42.             oe := OpenDeskAcc(DAName);
  43.             SetPort(save);
  44.         end
  45.         else if themenu = M_Edit then begin
  46.             if has_AppleEvents then begin
  47.                 case theitem of
  48.                     EMUndo: 
  49.                         SendSelfSimpleEvent(kAECoreSuite, kAEUndo);
  50.                     EMCut: 
  51.                         SendSelfSimpleEvent(kAECoreSuite, kAECut);
  52.                     EMCopy: 
  53.                         SendSelfSimpleEvent(kAECoreSuite, kAECopy);
  54.                     EMPaste: 
  55.                         SendSelfSimpleEvent(kAECoreSuite, kAEPaste);
  56.                     EMClear: 
  57.                         SendSelfSimpleEvent(kAECoreSuite, kAEDelete);
  58.                     EMSelectAll: 
  59.                         SendSelfSimpleEvent(kAECoreSuite, kAESelect); { hmmm }
  60.                     otherwise
  61.                         FrontObject.DoEditMenu(theitem);
  62.                 end;
  63.             end
  64.             else begin
  65.                 FrontObject.DoEditMenu(theitem);
  66.             end;
  67.         end;
  68.     end;
  69.  
  70.     var
  71.         with_option: boolean;
  72.  
  73.     procedure DoClose;
  74.     begin
  75.         DoCloseAll(with_option);
  76.     end;
  77.  
  78.     procedure SetCloseMenu (themenu, theitem: integer);
  79.         var
  80.             fw: windowPtr;
  81.             er: EventRecord;
  82.             dummy: boolean;
  83.     begin
  84.         fw := FrontWindow;
  85.         if fw = nil then begin
  86.             SetIDItemEnable(themenu, theitem, (fw <> nil) & windowPeek(fw)^.goAwayFlag & (GetWType(fw) <> WT_NotMine));
  87.         end
  88.         else begin
  89.             SetIDItemEnable(themenu, theitem, windowPeek(fw)^.goAwayFlag);
  90.         end;
  91.         dummy := OSEventAvail(everyEvent, er);
  92.         with_option := BAND(er.modifiers, optionKey) <> 0;
  93.         if option_close_str > 0 then begin
  94.             if with_option then begin
  95.                 SetIDItem(themenu, theitem, GetGlobalString(option_close_str));
  96.             end
  97.             else begin
  98.                 SetIDItem(themenu, theitem, GetGlobalString(normal_close_str));
  99.             end;
  100.         end;
  101.     end;
  102.  
  103.     procedure SetEditMenus (menu, item: integer);
  104.     begin
  105.         FrontObject.SetEditMenuItem(item);
  106.     end;
  107.  
  108.     procedure DoQuit;
  109.     begin
  110.         if has_AppleEvents then begin
  111.             SendSelfSimpleEvent(kCoreEventClass, kAEQuitApplication);
  112.         end
  113.         else begin
  114.             quitNow := true;
  115.         end;
  116.     end;
  117.  
  118. {$S Init}
  119.     procedure InitOOMenus (defaultproc: procptr);
  120.         var
  121.             mh: menuHandle;
  122.             oe, junk: OSErr;
  123.             hstr: str255;
  124.             vers: versionRecord;
  125.     begin
  126.         quitNow := false;
  127.         editEnabled := true;
  128.         if defaultproc = nil then
  129.             defaultproc := @DoDefaultMenu;
  130.  
  131.         InitFMenus(defaultproc);
  132.  
  133.         MH_Apple := GetFMenu(M_Apple);
  134.         AddResMenu(MH_Apple, 'DRVR');
  135.         InsertMenu(MH_Apple, 0);
  136.  
  137.         MH_File := GetFMenu(M_File);
  138.         InsertMenu(MH_File, 0);
  139.         MH_Edit := GetFMenu(M_Edit);
  140.         InsertMenu(MH_Edit, 0);
  141.  
  142.         M_HM_Help_I := -1;
  143.         hstr := GetGlobalString(help_menu_text);
  144.         if has_HelpMgr and (hstr <> '') then begin
  145.             GetVersion(vers);
  146.             SPrintS3(hstr, hstr, vers.name, '', '');
  147.             oe := HMGetHelpMenuHandle(mh);
  148.             if (oe = noErr) and (mh <> nil) then begin
  149.                 AppendMenu(mh, hstr);
  150.                 M_HM_Help_I := CountMItems(mh);
  151.                 AddFCommand(kHMHelpMenuID, M_HM_Help_I, CHelp);
  152.             end;
  153.         end;
  154.  
  155.         if has_AppleEvents then begin
  156.             junk := AEInstallEventHandler(kAECoreSuite, kAEUndo, @HandleEditMenu, EMUndo, false);
  157.             junk := AEInstallEventHandler(kAECoreSuite, kAECut, @HandleEditMenu, EMCut, false);
  158.             junk := AEInstallEventHandler(kAECoreSuite, kAECopy, @HandleEditMenu, EMCopy, false);
  159.             junk := AEInstallEventHandler(kAECoreSuite, kAEPaste, @HandleEditMenu, EMPaste, false);
  160.             junk := AEInstallEventHandler(kAECoreSuite, kAEDelete, @HandleEditMenu, EMClear, false);
  161.             junk := AEInstallEventHandler(kAECoreSuite, kAESelect, @HandleEditMenu, EMSelectAll, false);
  162.         end;
  163.  
  164.         SetFBoth(Cclose, @DoClose, @SetCloseMenu);
  165.         SetFCommand(Cquit, @DoQuit);
  166.         SetFSetMenu(Cundo, @SetEditMenus);
  167.         SetFSetMenu(Ccut, @SetEditMenus);
  168.         SetFSetMenu(Ccopy, @SetEditMenus);
  169.         SetFSetMenu(Cpaste, @SetEditMenus);
  170.         SetFSetMenu(Cclear, @SetEditMenus);
  171.         SetFSetMenu(Cselectall, @SetEditMenus);
  172.         SetFMenus;
  173.     end;
  174.  
  175.     procedure DisplayMenuBar;
  176.         var
  177.             dummyb: boolean;
  178.     begin
  179.         dummyb := SetOOMenuBar;
  180.         DrawMenuBar;
  181.     end;
  182.  
  183. {$S Term}
  184.     procedure FinishOOMenus;
  185.     begin
  186.         FinishFMenus;
  187.     end;
  188.  
  189. end.